{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# cntopic\n",
    "简单好用的lda话题模型，支持中英文。该库基于gensim和pyLDAvis，实现了lda话题模型及可视化功能。\n",
    "\n",
    "# 安装"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pip install cntopic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用\n",
    "这里给大家引入一个场景，假设大家采集新闻数据，忘记采集新闻文本对应的新闻类别，如果人工标注又很费工夫。这时候我们可以用lda话题模型帮我们洞察数据中的规律，发现新闻有n种话题群体。这样lda模型对数据自动打标注topic_1, topic_2, topic_3... ,topic_n。\n",
    "\n",
    "我们研究者的工作量仅仅限于解读topic_1, topic_2, topic_3... ,topic_n分别是什么话题即可。\n",
    "\n",
    "lda训练过程，大致分为\n",
    "1. 读取文件\n",
    "2. 准备数据\n",
    "3. 训练lda模型\n",
    "4. 使用lda模型\n",
    "5. 存储与导入lda模型\n",
    "# 1. 读取文件\n",
    "这里我们用一个新闻数据,一共有10类，每类1000条数据，涵盖\n",
    "\n",
    "'时尚', '财经', '科技', '教育', '家居', '体育', '时政', '游戏', '房产', '娱乐'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>content</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>体育</td>\n",
       "      <td>鲍勃库西奖归谁属？ NCAA最强控卫是坎巴还是弗神新浪体育讯如今，本赛季的NCAA进入到了末...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>体育</td>\n",
       "      <td>麦基砍28+18+5却充满寂寞 纪录之夜他的痛阿联最懂新浪体育讯上天对每个人都是公平的，贾维...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>体育</td>\n",
       "      <td>黄蜂vs湖人首发：科比冲击七连胜 火箭两旧将登场新浪体育讯北京时间3月28日，NBA常规赛洛...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>体育</td>\n",
       "      <td>双面谢亚龙作秀终成做作 谁来为低劣行政能力埋单是谁任命了谢亚龙？谁放纵了谢亚龙？谁又该为谢亚...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>体育</td>\n",
       "      <td>兔年首战山西换帅后有虎胆 张学文用乔丹名言励志今晚客场挑战浙江稠州银行队，是山西汾酒男篮的兔...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  label                                            content\n",
       "0    体育  鲍勃库西奖归谁属？ NCAA最强控卫是坎巴还是弗神新浪体育讯如今，本赛季的NCAA进入到了末...\n",
       "1    体育  麦基砍28+18+5却充满寂寞 纪录之夜他的痛阿联最懂新浪体育讯上天对每个人都是公平的，贾维...\n",
       "2    体育  黄蜂vs湖人首发：科比冲击七连胜 火箭两旧将登场新浪体育讯北京时间3月28日，NBA常规赛洛...\n",
       "3    体育  双面谢亚龙作秀终成做作 谁来为低劣行政能力埋单是谁任命了谢亚龙？谁放纵了谢亚龙？谁又该为谢亚...\n",
       "4    体育  兔年首战山西换帅后有虎胆 张学文用乔丹名言励志今晚客场挑战浙江稠州银行队，是山西汾酒男篮的兔..."
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv('chinese_news.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "label标签的分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "家居    1000\n",
       "时尚    1000\n",
       "房产    1000\n",
       "时政    1000\n",
       "教育    1000\n",
       "游戏    1000\n",
       "财经    1000\n",
       "娱乐    1000\n",
       "体育    1000\n",
       "科技    1000\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['label'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 准备数据\n",
    "一般准备数据包括:\n",
    "1. 分词、数据清洗\n",
    "2. 按照模块需求整理数据的格式\n",
    "\n",
    "\n",
    "注意在scikit-learn中:\n",
    "- 英文文本不需要分词，原封不动传入即可。\n",
    "- 中文文本需要先分词，后整理为英文那样用空格间隔的字符串。形如”我 爱 中国“"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache /var/folders/sc/3mnt5tgs419_hk7s16gq61p80000gn/T/jieba.cache\n",
      "Loading model cost 0.633 seconds.\n",
      "Prefix dict has been built successfully.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[['鲍勃', '库西', '奖归', 'NCAA', '最强', '控卫', '坎巴', '还是', '弗神', '新浪', '体育讯', '如今', '本赛季', 'NCAA', '进入', '末段', '各项', '奖项', '评选', '结果', '即将', '出炉', '其中', '评选', '最佳', '控卫', '鲍勃', '库西', '下周', '最终', '四强', '战时', '公布', '鲍勃', '库西', '奖是', '由奈', '史密斯', '篮球', '名人堂', '提供', '旨在', '奖励', '年度', '最佳', '大学', '控卫', '最终', '获奖', '球员', '即将', '以下', '几名', '热门', '人选', '产生', 'NCAA', '疯狂', '三月', '专题', '主页', '上线', '点击', '链接', '查看', '精彩内容', '吉梅尔', '弗雷', '戴特', '杨百翰', '大学', '弗神', '吉梅尔', '弗雷', '戴特', '一直', '备受', '关注', '不仅仅', '一名', '射手', '他会用', '终结', '对手', '脚踝', '一样', '变向', '面前', '防守', '并且', '可以', '任意', '一支', '完成', '得分', '如果', '犯规', '可以', '提前', '两份', '划入', '因为', '一名', '命中率', '高达', '90%', '罚球', '弗雷', '戴特', '具有', '所有', '伟大', '控卫', '具备', '一点', '特质', '一位', '赢家', '一位', '领导者', '整个', '赛季', '至始', '至终', '稳定', '领导', '球队', '前进', '这是', '无可比拟', '杨百翰', '大学', '主教练', '戴夫', '罗斯', '称赞', '得分', '能力', '毋庸置疑', '但是', '认为', '带领', '球队', '获胜', '能力', '重要', '控卫', '职责', '我们', '主场', '之外', '比赛', '客场', '立场', '取胜', '19', '表现', '很棒', '弗雷', '戴特', '能否', 'NBA', '取得成功', '当然', '但是', '很多', '专业人士', '我们', '资格', '做出', '这样', '判断', '喜爱', '凯尔特人', '主教练', '多克', '弗斯', '说道', '很棒', '看过', 'ESPN', '片段', '剪辑', '剪辑', '来看', '超级', '巨星', '认为', '成为', '一名', '优秀', 'NBA', '球员', '诺兰', '史密斯', '杜克大学', '赛季', '球队', '宣布', '一天', '控卫凯瑞', '厄尔', '文因', '脚趾', '伤病', '缺席', '赛季', '大部分', '比赛', '诺兰', '史密斯', '开始', '接管', '球权', '进攻', '端上', '发条', 'ACC', '联盟', '杜克大学', '所在', '分区', '得分', '榜上', '名列前茅', '同时', '分区', '助攻', '榜上', '占据', '头名', '众强', '林立', 'ACC', '联盟', '前无古人', '认为', '全美', '其他', '球员', '凯瑞', '厄尔', '受伤', '如此', '接管', '球队', '并且', '之前', '毫无准备', '杜克', '主教练', '迈克', '沙舍', '夫斯基', '赞扬', '他会', '比赛', '带入', '自己', '节奏', '得分', '组织', '领导', '球队', '无所不能', '而且', '现在', '攻防', '俱佳', '持球', '防守', '提高', '总之', '拥有', '辉煌', '赛季', '坎巴', '沃克', '康涅狄格', '大学', '坎巴', '沃克', '带领', '康涅狄格', '赛季', '毛伊岛', '邀请赛', '一路', '力克', '密歇根州', '肯塔基', '等队', '夺冠', '他场', '30', '助攻', '得到', '最佳', '球员', '大东', '赛区', '锦标赛', '全国', '锦标赛', '他场', '27.1', '6.1', '篮板', '5.1', '助攻', '依旧', '如此', '给力', '疯狂', '表现', '开始', '这个', '赛季', '疯狂', '表现', '结束', '这个', '赛季', '我们', '全国', '锦标赛', '前进', '并且', '之前', '曾经', '连赢', '赢得', '大东', '赛区', '锦标赛', '冠军', '这些', '归功于', '坎巴', '沃克', '康涅狄格', '大学', '主教练', '吉姆', '卡洪', '称赞', '一名', '纯正', '控卫', '而且', '能为', '我们', '得分', '单场', '42', '有过', '单场', '17', '助攻', '单场', '15', '篮板', '这些', '一名', '英尺', '175', '球员', '完成', '我们', '很多', '球员', '最好', '领导者', '球队', '贡献', '最大', '乔丹', '泰勒', '威斯康辛', '大学', '全美', '没有', '一个', '持球者', '乔丹', '泰勒', '一样', '很少', '失误', '4.26', '助攻', '失误', '全美', '遥遥领先', '大十', '赛区', '比赛', '平均', '35.8', '分钟', '一次', '失误', '还是', '出色', '得分手', '全场', '39', '击败', '印第安纳', '大学', '比赛', '就是', '最好', '证明', '其中', '下半场', '曾经', '18', '那个', '夜晚', '证明', '自己', '值得', '首轮', '顺位', '当时', '见证者', '印第安纳', '大学', '主教练', '汤姆', '雷恩', '说道', '一名', '控卫', '所有', '要求', '不过', '领导', '球队', '球队', '更好', '带领', '球队', '成功', '乔丹', '泰勒', '做到', '威斯康辛', '教练', '莱恩', '说道', '诺里斯', '科尔', '克利夫兰', '诺里斯', '科尔', '草根', '传奇', '正在', '上演', '默默无闻', '克利夫兰', '招募', '开始', '刻苦', '训练', '去年', '夏天', '加练', '千次', '跳投', '提高', '这个', '可能', '弱点', '本赛季', '杨斯顿', '比赛', '得到', '40', '20', '篮板', '助攻', '之前', '过去', '15', '只有', '一位', '球员', '曾经', 'NCAA', '一级', '联盟', '做到', '40', '20', '名字', '布雷克', '格里芬', '可以', '轻松', '地防下', '对方', '王牌', '克利夫兰', '主教练', '加里', '沃特斯', '如此', '称赞', '自己', '弟子', '同时', '得分', '球队', '助攻', '几乎', '做到', '一个', '成功', '团队', '所有', '需要', '其中', '四名', '球员', '带领', '自己', '球队', '进入', '甜蜜', '16', '虽然', '球员', '他们', '各自', '球队', '大门', '之外', '但是', '他们', '已经', '表现', '足够', '出色', '不远', '将来', '他们', '可能', '出现', '一所', '熟悉', 'NBA', '球馆', 'clay'], ['麦基', '28', '18', '充满', '寂寞', '纪录', '之夜', '阿联', '新浪', '体育讯', '上天', '每个', '公平', '维尔', '麦基', '例外', '今天', '华盛顿', '奇才', '客场', '104', '114', '负于', '金州', '勇士', '麦基', '好不容易', '等到', '软柿子', '机会', '上半场', '打出', '现象', '表现', '可惜', '无法', '一以贯之', '最终', '麦基', '12', '得到', '生涯', '最高', '28', '以及', '生涯', '最佳', '18', '篮板', '另有', '封盖', '此外', '11', '罚球', '命中', '10', '这两项', '生涯', '最高', '如果', '赛前', '搞个', '竞猜', '上半场', '奇才', '阵中', '罚球', '次数', '最多', '球员', '有人', '麦基', '不是', '恶搞', '就是', '脑残', '半场', '结束', '麦基竟', '22', '第二节', '14', '罕见', '出手', '罚球', '11', '命中', '其中', '10', '此外', '抢下', '11', '篮板', '勇士', '首发', '五虎', '篮板', '持平', '盖帽', '竟然', '勇士', '全队', '上半场', '盖帽', '总数', '麦基为', '奇才', '带来', '什么', '除了', '得分', '方面', '异军突起', '罚球线', '杀伤', '对手', '率队', '紧咬', '比分', '封盖', '威慑', '对手', '篮板', '贡献', '最为', '关键', '众所周知', '篮板', '就是', '勇士', '生命线', '那次', '交锋', '时任', '代理', '主帅', '兰迪', '惠特曼', '赛前', '甚至', '沃尔', '尼克', '杨二人', '下达', '篮板', '不少', '10', '硬性', '指标', '惠特曼', '没疯', '深知', '守住', '篮板', '阵地', '如同', '扼住', '勇士', '咽喉', '上次', '交锋', '拿下', '16', '篮板', '大卫', '称霸', '篮板', '我们', '取胜', '希望', '大些', '投中', '多少', '无所谓', '一定', '保护', '篮板', '最终', '勇士', '篮板', '数以', '54', '40', '领先', '今天', '半场', '结束', '麦基', '李仅', '篮板', '进账', '造成', '这种', '局面', '关键因素', '身高', '2.11', '安德里', '德林', '斯伤', '停后', '勇士', '内线', '更为', '迷你', '2.06', '弗拉迪米尔', '拉德', '诺维奇', '2.08', '艾派', '乌杜', '2.08', '路易斯', '阿蒙', '德森', '2.06', '由此', '2.13', '弹跳', '出众', '麦基', '有些', '鹤立鸡群', '翻开', '本赛季', '中锋', '篮板', '效率', '德林', '位居', '13', '麦基', '20', '李则', '31', '可惜', '麦基', '出彩', '不但', '超出', '勇士', '预期', '超出', '奇才', '预期', '注定', '不可', '长久', '第三节', '李砍', '12', '全场', '26', '15', '33', '12', '篮板', '助攻', '麦基', '防守', '不利', '放大', '11', '奇才', '失误', '蒙塔', '埃利斯', '带球', '直冲', '篮下', '面对', '麦基', '防守', '华丽', '篮下', '360', '转身', '上篮', '命中', '全场', '掌声雷动', '麦基', '身影', '无比', '落寞', '下半场', '麦基有', '困顿', '篮板', '对方', '全场', '勇士', '篮板', '落后', '上半场', '拉风', '罚球', '下半场', '竟然', '一次', '没有', '阿联', '此役', '先扬', '表现', '如出一辙', '麦基', '奇才', '内线', '缺兵', '少将', '苦头', '魑魅'], ['黄蜂', 'vs', '湖人', '首发', '科比', '冲击', '连胜', '火箭', '两旧', '登场', '新浪', '体育讯', '北京', '时间', '28', 'NBA', '常规赛', '洛杉矶', '湖人', '主场', '迎战', '新奥尔良', '黄蜂', '赛前', '双方', '公布', '首发', '阵容', '点击', '进入', '新浪', '体育', '视频', '直播室', '点击', '进入', '新浪', '体育', '图文', '直播室', '点击', '进入', '新浪', '体育', 'NBA', '专题', '点击', '进入', '新浪', 'NBA', '官方', '微博', '双方', '首发', '阵容', '湖人队', '德里克', '费舍尔', '科比', '布莱恩特', '罗恩', '阿泰斯特', '保罗', '加索尔', '安德鲁', '拜纳姆', '黄蜂队', '克里斯', '保罗', '马科', '贝里', '内利', '特雷沃', '阿里', '卡尔', '兰德', '埃梅卡', '奥卡福', '新浪', '体育'], ['双面', '谢亚龙', '作秀', '终成', '做作', '低劣', '行政', '能力', '埋单', '任命', '谢亚龙', '放纵', '谢亚龙', '谢亚龙', '南勇们', '倒掉', '负责', '陈鹏', '南勇', '进去', '谢亚龙', '还会', '一语', '中国', '足坛', '扫赌', '反黑', '风暴', '终于', '谨小慎微', '平庸', '低调', '足协', '掌门人', '谢亚龙', '落网', '同时', '立案侦查', '还有', '原国足', '领队', '蔚少辉', '技术部', '主任', '李冬生', '这场', '空前', '风暴', '或许', '延续', '谢亚龙', '倒掉', '再次', '见证', '中国足协', '难以', '洗刷', '体制', '原罪', '人们', '由衷', '期待', '中国', '足球', '浴火重生', '否极泰来', '作秀', '做作', '谢亚龙', '过分', '低调', '不然', '与其说', '低调', '不如说是', '媒体', '本能', '漠视', '反感', '笔者', '2008', '年国足', '国奥', '昆明', '海埂', '集训', '期间', '谢亚龙', '偶遇', '采访', '要求', '立即', '遭到', '谢极', '不耐烦', '拒绝', '什么', '有事', '领队', '笔者', '多次', '采访', '国足', '经历', '谢亚龙', '总给', '诡异', '冷淡', '印象', '不少', '媒体', '谢亚龙', '一贯', '感觉', '唯一', '例外', '笔者', '参与', '2007', '男足', '亚洲杯', '报道', '吉隆坡', '中国队', '小组赛', '败给', '乌兹别克斯坦', '未能', '小组', '出线', '一役', '之后', '谢亚龙', '主动', '记者', '面前', '两句', '想起', '吉鸿昌', '先生', '一首', '抗日', '今日', '国破尚', '如此', '何惜', '此头', '此诗', '一出', '一片', '哗然', '无论如何', '中国队', '丑陋', '死亡', '如何', '民族英雄', '吉鸿昌', '慷慨悲歌', '相提并论', '谢亚龙', '并非', '无名之辈', '短跑', '出身', '历任', '北京体育大学', '副校长', '国家体委', '群体', '司长', '田径运动', '管理中心', '主任', '体育', '科研所', '副所长', '期间', '严查', '中国', '田径', '兴奋剂', '问题', '著名', '马家军', '因此', '受到冲击', '2002', '谢亚龙', '挂职', '陕西省', '安康', '市委', '书记', '2004', '调回', '体育总局', '电子', '信息中心', '党委书记', '2005', '谢亚龙', '入主', '足协', '任职', '年内', '中国', '男女', '足均', '出现', '前所未有', '滑坡', '男足', '止步', '亚洲杯', '小组赛', '无缘', '世界杯', '亚洲区', '十强赛', '女足', '止步', '世界杯', '奥运会', '八强', '甚至', '青少年', '比赛', '一败涂地', '国少', '国青', '亚洲区', '赛事', '纷纷', '出现', '史上', '最差', '日前', '浙江省', '反黑', '斗士', '陈培德', '爆料', '当年', '谢亚龙', '主动', '请缨', '前往', '足协', '履职', '媒体', '诉苦', '自己', '从未', '想过', '足协', '而是', '组织', '安排', '只能', '服从', '此举', '足见', '谢亚龙', '两面', '作为', '当年', '国家体委', '主任', '伍绍祖', '秘书', '这位', '不善', '业务', '门外汉', '很快', '低调', '甚至', '胆小', '风格', '示人', '时常', '按捺不住', '地蹦到', '前台', '2008', '年国足', '备战', '世界杯', '喜欢', '球队', '训练', '前后', '走上', '球场', '溜达', '接受', '记者', '球迷', '啧啧', '嘘声', '因对', '福拉多', '缺乏', '信心', '很快', '国足', '祭出', '世界', '罕见', '双头', '同时', '起用', '杜伊', '福拉多', '共同', '执掌', '直接', '为国足', '预赛', '惨败', '祸根', '国奥', '出师不利', '架空', '杜伊', '殷铁生', '救火', '如此', '失魂落魄', '球队', '怎么', '可能', '取得', '佳绩', '一些', '惊世', '名言', '谢亚龙', '不时', '作秀', '佐证', '如杜伊率', '国奥队', '土伦杯', '拿到', '亚军', '立即', '我们', '热烈', '掌声', '感谢', '杜伊', '就是', '国奥队', '战神', '国奥队', '备战', '关口', '谢亚龙', '要求', '杜伊', '要求', '加量', '非常', '专业', '训练', '专家', '科技部', '颁发', '证书', '国足世', '预赛', '天津', '主场', '卡塔尔', '无缘', '亚洲', '十强赛', '谢亚龙', '援引', '周总理', '生死', '态度', '鼓励', '球队', '最后', '两场', '比赛', '即使', '要死', '气势', '一些', '著名', '当属', '中国女足', '日本', '无缘', '奥运会', '四强', '谢亚龙', '总结', '会上', '指出', '中国女足', '需要', '训练', '叉腰', '迄今', '人们', '还是', '无法', '找到', '这块', '肌肉', '到底', '哪里', '不合时宜', '作秀', '终显', '做作', '这种', '表现欲', '一再', '放大', '谢亚龙', '中国', '足球', '盲目乐观', '盲目', '悲观', '似乎', '总是', '缺乏', '一位', '掌门人', '应有', '清晰', '思路', '价值', '判断', '因此', '成为', '中国', '足球', '2006', '2008', '年间', '腐败无能', '孱弱无力', '诡异', '缩影', '2007', '谢亚龙', '现身', '任何', '球场', '听到', '震耳欲聋', '谢亚龙', '下课', '之声', '这位', '掌门人', '笔者', '奥运会', '现场', '亲见', '充耳不闻', '一丝', '牵强', '微笑', '渐渐', '嘴角', '冻结', '足协', '南勇', '之后', '谢亚龙', '原本', '外界', '猜测', '随着', '李三人', '立案侦查', '谢亚龙', '任期', '经手', '几件', '大事', '成为', '焦点', '中国', '之队', '原来', '开发商', '亚足联', '开发', '公司', '更换', '盈方', '集团', '理由', '盈方', '赞助费', '亚足联', '开发', '公司', '多出', '200', '万美元', '谢亚龙', '提议', '一度', '遭到', '足协', '中层', '反对', '认为', '为了', '区区', '200', '万美元', '得罪', '亚足联', '实在', '不划算', '果然', '之后', '世界杯', '预选赛', '亚洲杯', '小组赛', '中国队', '连连', '遭遇', '死亡', '之组', '亚洲杯', '丑陋', '铩羽', '预赛', '再次', '跻身', '十强赛', '中国队', '屡屡', '裁判', '待见', '不能不', '谢亚龙', '当初', '忽悠', '亚足联', '有关', '谢亚龙', '究竟', '有没有', '从中', '收取', '好处', '福克斯', '赞助', '中超联赛', '悬案', '许多', '看来', '福克斯', '赞助', '中超联赛', '南勇', '一手', '操办', '当时', '南勇', '顶头上司', '谢亚龙', '6000', '多万元', '赞助', '没到', '情况', '经纪人', '提前', '拿走', '巨额', '佣金', '该案', '最终', '不了了之', '其间', '谢亚龙', '是否', '起到', '关键作用', '2008', '东亚', '四强赛', '期间', '谢亚龙', '是否', '利用', '职务', '获取', '一定', '利益', '据传', '国家队', '设立', '小金库', '贿赂', '裁判', '对手', '同时', '教练', '教练', '运动员', '收取', '黑金', '是否', '谢亚龙', '莫大', '干系', '谢亚龙', '任上', '重用', '四哥', '蔚少辉', '出事', '似乎', '顺理成章', '笔者', '昆明', '采访', '集训', '期间', '经常', '目睹', '领队', '大声', '队员', '架子', '主教练', '福拉多', '杜伊', '有过之而无不及', '任职期间', '中国队', '前后', '多达', '入选', '外界', '早有', '传言', '俱乐部', '球员', '要进', '国家队', '必须', '蔚少辉', '门槛', '四哥', '名牌', '名表', '大多', '需要', '自己', '掏腰包', '只要', '授意', '自己', '主力', '即可', '中国队', '预赛', '客场', '击败', '澳大利亚队', '领队', '居然', '率领', '队员', '高喊', '杜伊', '原因', '杜伊', '按照', '推荐', '安排', '位置', '相比之下', '担任', '裁委会', '主任', '李冬生', '各家', '俱乐部', '纷纷', '觊觎', '目标', '因为', '不仅', '直接', '分配', '裁判', '直接', '告知', '裁判', '如何', '执法', '认为', '职业联赛', '执法', '黑暗', '时期', '幕后', '推手', '从范广鸣', '吕锋', '邵文忠', '从南勇', '杨一民', '张建强', '谢亚龙', '蔚少辉', '李冬生', '中国', '足坛', '大鱼', '纷纷', '落网', '勾勒', '中国', '足球', '几年', '丑陋', '嘴脸', '恶劣', '生态', '最让人', '不解', '谢亚龙', '上任', '年来', '更换', '国字号', '球队', '教练', '换来', '男足', '连续', '输掉', '亚洲杯', '世界杯', '奥运会', '女足', '陷入', '裴恩才', '曼斯', '伊丽莎白', '商瑞华', '空前', '混乱', '谢亚龙', '履职', '期间', '中国', '足球', '跌至', '冰点', '频繁', '人事', '漩涡', '加剧', '内耗', '豪赌', '世界杯', '奥运会', '青少年', '足球', '一再', '忽略', '聘请', '外籍', '教练', '廉价', '货色', '完全', '没有', '长远规划', '这批', '中国男足', '排名', '70', '多位', '跌至', '百位', '开外', '足球', '官员', '问责', '全场', '高呼', '下课', '足协', '掌门人', '去职', '之后', '竟能', '悠然', '前往', '公司', '年薪', '百万', '董事长', '没有', '人为', '中国足协', '低劣', '行政', '能力', '埋单', '没有', '人为', '两支', '耗费', '大量', '纳税人', '血汗钱', '球队', '负责', '行政', '权力', '掌控', '巨大', '市场', '资源', '中国足协', '获得', '体制', '内外', '双重', '保障', '之后', '他们', '领导', '项目', '成绩', '与其', '享用', '资源', '严重', '背离', '耗费', '巨大', '投入', '得到', '低级', '产出', '实在', '令人', '匪夷所思', '2006', '意大利', '足坛', '爆出', '电话', '假球', '丑闻', '足协', '主席', '立即', '引咎辞职', '英格兰', '主帅', '埃里克森', '小报', '记者', '圈套', '英足', '赶紧', '交出', '辞职信', '中国', '1994', '开展', '职业联赛', '以来', '历次', '惨败', '换帅', '内乱', '统统', '球员', '教练', '俱乐部', '有关', '唯独', '足协', '无关', '无论', '各级', '国字号', '球队', '输得', '难看', '丢脸', '身为', '中国', '足球', '最高', '领导', '足协', '官员', '超然物外', '依然故我', '谢亚龙', '落网', '再次', '聚焦', '中国足协', '这一', '横跨', '官方', '民间', '怪胎', '很多', '似乎', '谢亚龙', '颇感', '同情', '认为', '悲剧', '体制', '催生', '恶之花', '任何人', '一肩', '足协', '专职', '主席', '兼足管', '中心', '主任', '中超', '公司', '董事长', '难免', '落马', '中国足协', '不过', '中国', '诸多', '领域', '权力', '失控', '困境', '再次', '放大', '顶多', '体制', '原罪', '一个', '突出', '版本', '人们', '不禁', '任命', '谢亚龙', '放纵', '谢亚龙', '谢亚龙', '南勇们', '倒掉', '负责', '中国', '足球', '能否', '浴火重生', '王俊生', '阎世铎', '已经', '跌倒', '南勇', '谢亚龙', '他们', '体制', '推动者', '更是', '体制', '牺牲品', '逐渐', '淡出', '人们', '视线', '谢亚龙', '罪与罚', '现行', '体制', '无法', '剥离', '韦迪', '上任', '之后', '无可', '无可', '中国', '足球', '何妨', '推倒重来', '实现', '体制', '突破', '亟需', '解决', '四大', '疑难', '首先', '解决', '中国足协', '足管', '中心', '一套', '人马', '两块', '牌子', '现状', '行政', '足球', '干预', '足协', '很难', '充分发挥', '民间组织', '职能', '导致', '中国', '足球', '长期以来', '成绩', '政绩', '急功近利', '忽略', '建设', '作为', '市场化', '程度', '最高', '运动', '项目', '中国', '足球', '市场化', '改革', '进行', '到底', '时候', '其次', '急需', '完善', '法律', '监管', '机制', '既要', '足协', '各项', '工作', '进行', '监督', '俱乐部', '运作', '管理', '方式', '球员', '行为', '进行', '监督', '否则', '中国', '足球联赛', '温床', '球员', '依然', '缺乏', '保障', '弱势群体', '抓进', '大鱼', '无法', '铲除', '腐败', '再有', '中国', '足球', '必须', '改变', '现有', '竞训', '模式', '青少年', '足球', '应当', '作为', '联赛', '平行', '一翼', '得到', '长足发展', '尊重', '足球运动', '规律', '扎扎实实', '培养', '后备', '人才', '只有', '全力', '抓好', '年龄', '层次', '训练', '比赛', '可能', '塑造', '中国', '足球', '未来', '同时', '中国', '足球', '市场化', '联赛', '机制', '需要', '不断完善', '要求', '尊重', '投资人', '热情', '利益', '共同', '建设', '呵护', '良好', '市场秩序', '联赛', '真正', '成为', '国家队', '大后方', '大本营', '如今', '反赌', '扫黑', '风暴', '正以', '摧枯拉朽', '之势', '涤荡', '污浊', '韦迪', '上任', '以来', '惊人', '之言', '惊人之举', '今年', '秦皇岛', '中国足协', '会议', '抛出', '三大', '纲领', '足协', '足管', '中心', '管办', '分离', '国家队', '形象', '打造', '青少年', '留洋', '细致', '谋划', '如果', '韦迪能', '坚决', '实施', '中国', '足球', '这个', '风雨飘摇', '关口', '迎来', '真正', '转机', '可以', '预见', '去年底', '进行', '扫黑', '风暴', '一定', '进行', '到底', '排除', '新账', '旧账', '一起', '其实', '中国', '足球', '早就', '积重难返', '足协', '领导', '足协', '中层', '俱乐部', '领导', '球员', '知名', '教练', '领队', '裁判', '经纪人', '百分百', '干净', '迄今为止', '没有', '重量级', '球员', '牵扯', '其中', '随着', '谢亚龙', '南勇们', '纷纷', '落马', '肯定', '一批', '足球', '大佬', '全身而退', '如果', '大面积', '追查', '中国', '职业联赛', '不是', '没有', '停摆', '可能', '眼前', '千疮百孔', '何妨', '推倒重来', '正如', '马来西亚', '联赛', '当年', '风暴', '伤筋动骨', '该国', '联赛', '组织', '竞赛', '纪律', '更加', '完善', '健康', '中国', '足球', '未来', '一次', '惨烈', '剧痛', '代价', '值得', '中国', '足球', '必须', '浴火', '之后', '有望', '重新', '赢得', '球迷', '原谅', '尊重'], ['兔年', '首战', '山西', '换帅', '虎胆', '张学文', '乔丹', '名言', '励志', '今晚', '客场', '挑战', '浙江', '稠州', '银行', '山西汾酒', '男篮', '兔年', '第一战', '虽然', '积分榜', '两队', '有些', '差距', '目前', '山西队', '已经', '惧怕', '任何', '对手', '依然', '取胜', '希望', '浙江队', '目前', '11', '位居', '10', '山西汾酒', '13', '位居', '15', '单从', '排名', '山西队', '似乎', '不及', '浙江队', '两队', '实力', '不相上下', '而且', '山西队', '还有', '心理', '优势', '山西队', '取胜', '场中', '一场', '来自', '浙江队', '主场', '凭借', '罗杰斯', '神勇', '发挥', '山西队', '大胜', '对手', '取得', '主场', '首胜', '联赛', '初期', '浙江队', '屡战屡败', '积分', '垫底', '裁掉', '大牌', '球星', '詹姆斯', '召回', '上赛季', '外援', '威廉姆斯', '球队', '找到', '取胜', '钥匙', '成绩', '突飞猛进', '拥有', '外援', '山西队', '实力', '其实', '不弱', '由于', '种种原因', '目前', '取得', '胜利', '球迷', '王晖', '的话', '悲伤', '不是', '山西队', '屡战屡败', '而是', '实力', '没有', '发挥', '出来', '一个', '角度', '来讲', '山西队', '依赖', '外援', '发挥', '一旦', '外援', '状态', '正佳', '可以', '战胜', '任何', '强队', '否则', '佛山', '这样', '弱旅', '下来', '今晚', '外援', '表现', '直接', '决定', '球队', '胜负', '春节', '杨学增', '入主', '球队', '全队', '空前团结', '呈现出', '上升', '势头', '正月初二', '全队', '集结', '进行', '恢复性', '训练', '目前', '球队', '士气', '旺盛', '张学文', '球星', '乔丹', '的话', '激励', '自己', '可以', '接受', '失败', '绝对', '不能', '接受', '自己', '未曾', '奋斗', '对于', '今晚', '兔年', '首战', '即便', '客场', '征战', '全队', '上下', '信心', '满满', '取胜', '决心', '本报记者', '王建光']]\n"
     ]
    }
   ],
   "source": [
    "import jieba\n",
    "\n",
    "def text2tokens(raw_text):\n",
    "    #将文本raw_text分词后得到词语列表\n",
    "    tokens = jieba.lcut(raw_text)\n",
    "    #tokens = raw_text.lower().split(' ') #英文用空格分词即可\n",
    "    tokens = [t for t in tokens if len(t)>1] #剔除单字\n",
    "    return tokens\n",
    "\n",
    "#对content列中所有的文本依次进行分词\n",
    "documents = [text2tokens(txt) \n",
    "             for txt in df['content']]  \n",
    "\n",
    "#显示前5个document\n",
    "print(documents[:5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 训练lda模型\n",
    "现在开始正式使用cntopic模块，开启LDA话题模型分析。步骤包括\n",
    "\n",
    "\n",
    "|Step|功能|代码|\n",
    "|---|:---|:---|\n",
    "|0|准备documents，已经在前面准备好了|-|\n",
    "|1|初始化Topic类|topic = Topic(cwd=os.getcwd())|\n",
    "|2|根据documents数据，构建词典空间|topic.create_dictionary(documents=documents)|\n",
    "|3|构建语料(将文本转为文档-词频矩阵)|topic.create_corpus(documents=documents)|\n",
    "|4|指定n_topics，构建LDA话题模型|topic.train_lda_model(n_topics)|\n",
    "\n",
    "这里我们就按照n_topics=10构建lda话题模型，一般情况n_topics可能要实验多次，找到最佳的n_topics\n",
    "\n",
    "\n",
    "\n",
    "运行过程中会在代码所在的文件夹内生成一个output文件夹，内部含有\n",
    "- dictionary.dict 词典文件\n",
    "- lda.model.xxx 多个lda模型文件，其中xxx是代指\n",
    "\n",
    "![]()\n",
    "上述代码耗时较长，请耐心等待程序运行完毕~"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<gensim.models.ldamulticore.LdaMulticore at 0x158da5090>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "from cntopic import Topic\n",
    "\n",
    "topic = Topic(cwd=os.getcwd()) #构建词典dictionary\n",
    "topic.create_dictionary(documents=documents) #根据documents数据，构建词典空间\n",
    "topic.create_corpus(documents=documents) #构建语料(将文本转为文档-词频矩阵)\n",
    "topic.train_lda_model(n_topics=10) #指定n_topics，构建LDA话题模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. 使用LDA模型\n",
    "\n",
    "上面的代码大概运行了5分钟，LDA模型已经训练好了。 \n",
    "\n",
    "现在我们可以利用LDA做一些事情，包括\n",
    "\n",
    "|Step|功能|代码|补充|\n",
    "|---|:---|:---|:---|\n",
    "|1|分词后的某文档|document = ['游戏', '体育']||\n",
    "|2|预测document对应的话题|topic.get_document_topics(document)||\n",
    "|3|显示每种话题与对应的特征词之间关系|topic.show_topics()||\n",
    "|4|数据中不同话题分布情况|topic.topic_distribution(raw_documents)|raw_documents是列表或series，如本教程中的df['content']|\n",
    "|5|可视化LDA话题模型|topic.visualize_lda()|可视化结果在output中查找vis.html文件，浏览器打开即可||\n",
    "\n",
    "## 4.1 准备document\n",
    "假设有一个文档 ``'游戏体育真有意思'`` 分词处理得到document"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['游戏', '体育', '真', '有意思']"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "document = jieba.lcut('游戏体育真有意思')\n",
    "document"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.2 预测document对应的话题\n",
    "我们使用topic模型，看看document对应的话题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0, 0.02501536),\n",
       " (1, 0.025016038),\n",
       " (2, 0.28541195),\n",
       " (3, 0.025018401),\n",
       " (4, 0.025018891),\n",
       " (5, 0.025017735),\n",
       " (6, 0.51443774),\n",
       " (7, 0.02502284),\n",
       " (8, 0.025015472),\n",
       " (9, 0.025025582)]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topic.get_document_topics(document)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们的lda话题模型是按照n_topics=10训练的，限制调用topic预测某个document时，得到的结果是这10种话题及对应概率的元组列表。\n",
    "\n",
    "\n",
    "从中可以看到概率最大的是 ``话题6``， 概率有0.51443774。\n",
    "\n",
    "\n",
    "所以我们可以大致认为document是话题6\n",
    "\n",
    "## 4.3 显示每种话题与对应的特征词之间关系\n",
    "但是仅仅告诉每个文档是 ``话题n``，我们仍然不知道 ``话题n``代表的是什么，所以我们需要看看每种 ``话题n``对应的 ``特征词语``。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0,\n",
       "  '0.042*\"基金\" + 0.013*\"市场\" + 0.011*\"投资\" + 0.009*\"公司\" + 0.005*\"上涨\" + 0.004*\"股票\" + 0.004*\"房地产\" + 0.004*\"指数\" + 0.004*\"房价\" + 0.004*\"2008\"'),\n",
       " (1,\n",
       "  '0.010*\"中国\" + 0.007*\"移民\" + 0.006*\"项目\" + 0.005*\"发展\" + 0.005*\"表示\" + 0.005*\"经济\" + 0.005*\"政府\" + 0.005*\"土地\" + 0.004*\"政策\" + 0.004*\"问题\"'),\n",
       " (2,\n",
       "  '0.014*\"比赛\" + 0.009*\"他们\" + 0.008*\"球队\" + 0.007*\"篮板\" + 0.006*\"我们\" + 0.005*\"球员\" + 0.005*\"季后赛\" + 0.005*\"时间\" + 0.005*\"热火\" + 0.005*\"赛季\"'),\n",
       " (3,\n",
       "  '0.013*\"我们\" + 0.013*\"一个\" + 0.009*\"自己\" + 0.009*\"这个\" + 0.007*\"没有\" + 0.007*\"他们\" + 0.006*\"可以\" + 0.006*\"就是\" + 0.006*\"很多\" + 0.006*\"记者\"'),\n",
       " (4,\n",
       "  '0.020*\"电影\" + 0.010*\"导演\" + 0.009*\"微博\" + 0.008*\"影片\" + 0.006*\"观众\" + 0.006*\"一个\" + 0.005*\"自己\" + 0.005*\"票房\" + 0.004*\"拍摄\" + 0.004*\"娱乐\"'),\n",
       " (5,\n",
       "  '0.018*\"学生\" + 0.015*\"留学\" + 0.008*\"大学\" + 0.008*\"可以\" + 0.006*\"功能\" + 0.006*\"像素\" + 0.006*\"拍摄\" + 0.006*\"采用\" + 0.005*\"学校\" + 0.005*\"申请\"'),\n",
       " (6,\n",
       "  '0.007*\"玩家\" + 0.006*\"封神\" + 0.006*\"手机\" + 0.006*\"online\" + 0.006*\"the\" + 0.006*\"游戏\" + 0.005*\"陈水扁\" + 0.005*\"活动\" + 0.005*\"to\" + 0.005*\"一个\"'),\n",
       " (7,\n",
       "  '0.009*\"信息\" + 0.009*\"考试\" + 0.009*\"游戏\" + 0.007*\"工作\" + 0.007*\"手机\" + 0.006*\"四六级\" + 0.006*\"考生\" + 0.005*\"发展\" + 0.004*\"可以\" + 0.004*\"霸王\"'),\n",
       " (8,\n",
       "  '0.015*\"我们\" + 0.011*\"企业\" + 0.011*\"产品\" + 0.010*\"市场\" + 0.009*\"家具\" + 0.009*\"品牌\" + 0.008*\"消费者\" + 0.007*\"行业\" + 0.007*\"中国\" + 0.007*\"一个\"'),\n",
       " (9,\n",
       "  '0.012*\"游戏\" + 0.011*\"玩家\" + 0.010*\"可以\" + 0.008*\"搭配\" + 0.008*\"活动\" + 0.006*\"时尚\" + 0.005*\"OL\" + 0.004*\"获得\" + 0.004*\"任务\" + 0.004*\"手机\"')]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topic.show_topics()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据上面的 ``话题n`` 与 ``特征词`` 大致可以解读每个 ``话题n`` 是什么内容的话题。\n",
    "\n",
    "## 4.4 话题分布情况\n",
    "现在我们想知道数据集中不同 ``话题n`` 的分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9    1670\n",
       "1    1443\n",
       "0    1318\n",
       "5    1265\n",
       "4    1015\n",
       "2     970\n",
       "8     911\n",
       "3     865\n",
       "7     307\n",
       "6     236\n",
       "Name: topic, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topic.topic_distribution(raw_documents=df['content'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们的数据有10类，每类是1000条。而现在LDA话题模型单纯的根据文本的一些线索，按照n_topics=10给我们分出的效果还不错。\n",
    "\n",
    "最完美的情况是每个 ``话题n`` 都是接近1000, 现在 ``话题9``太多， ``话题6、 话题7``太少。\n",
    "\n",
    "不过我们也要注意到某些话题可能存在交集，容易分错，比如\n",
    "- 财经、房产、时政\n",
    "- 体育娱乐\n",
    "- 财经、科技\n",
    "\n",
    "等\n",
    "\n",
    "综上，目前模型还算可以，表现还能接受。\n",
    "\n",
    "## 4.5 可视化\n",
    "现在只有10个话题， 我们用肉眼看还能接受，但是当话题数太多的时，还是借助可视化工具帮助我们科学评判训练结果。\n",
    "\n",
    "这就用到topic.visualize_lda()，运行结束后在\n",
    "\n",
    "``代码所在的文件夹内output中找vis.html文件，右键浏览器打开``"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "topic.visualize_lda()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "图中有左右两大区域\n",
    "- 左侧  话题分布情况，圆形越大话题越多，圆形四散在四个象限\n",
    "- 右侧  某话题对应的特征词，从上到下权重越来越低\n",
    "\n",
    "\n",
    "需要注意的是左侧\n",
    "- 尽量圆形均匀分布在四个象限比较好，如果圆形全部集中到有限的区域，模型训练不好\n",
    "- 圆形与圆形交集较少比较好，如果交集太多，说明n_topics设置的太大，应该设置的再小一些"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 五、存储与导入lda模型\n",
    "lda话题模型训练特别慢，如果不保存训练好的模型，实际上是在浪费我们的生命和电脑计算力。\n",
    "\n",
    "好消息是cntopic默认为大家存储模型，存储地址是output文件夹内，大家只需要知道如何导入模型即可。\n",
    "\n",
    "这里需要导入的有两个模型，使用步骤\n",
    "\n",
    "|步骤|模型|代码|作用|\n",
    "|---|---|---|---|\n",
    "|0|-|-|准备documents|\n",
    "|1|-|topic = Topic(cwd=os.getcwd())|初始化|\n",
    "|2|词典|topic.load_dictionary(dictpath='output/dictionary.dict')|直接导入词典，省略topic.create_dictionary()|\n",
    "|3|-|topic.create_corpus(documents=documents)|构建语料(将文本转为文档-词频矩阵)|\n",
    "|4|lda话题模型|topic.load_lda_model(modelpath='output/model/lda.model')|导入lda话题模型， 相当于省略topic.train_lda_model(n_topics)|\n",
    "\n",
    "现在我们试一试, 为了与之前的区分，这里我们起名topic2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "topic2 = Topic(cwd=os.getcwd())\n",
    "topic2.load_dictionary(dictpath='output/dictionary.dict')\n",
    "topic2.create_corpus(documents=documents)\n",
    "topic2.load_lda_model(modelpath='output/model/lda.model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大家可以自己回去试一试第4部分``使用LDA模型``的相关功能"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
